package operators;

public class LogicalOperators {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        // 逻辑与（&&）：两边都为true，结果才为true（短路特性）
        boolean andResult = a && b;
        System.out.println("a && b: " + andResult);  // false

        // 逻辑或（||）：至少一边为true，结果就为true（短路特性）
        boolean orResult = a || b;
        System.out.println("a || b: " + orResult);  // true

        // 逻辑非（!）：取反
        boolean notResult = !a;
        System.out.println("!a: " + notResult);  // false

        // 演示短路特性
        int x = 5;
        // 第一个条件为false，&&会短路，第二个条件不会执行
        boolean shortCircuitAnd = (x < 3) && (++x > 5);
        System.out.println("shortCircuitAnd: " + shortCircuitAnd + ", x = " + x);  // x仍为5

        int y = 5;
        // 第一个条件为true，||会短路，第二个条件不会执行
        boolean shortCircuitOr = (y > 3) || (++y > 5);
        System.out.println("shortCircuitOr: " + shortCircuitOr + ", y = " + y);  // y仍为5

        // 非短路逻辑运算符（&和|）
        int m = 5;
        // &不会短路，两边都会执行
        boolean nonShortAnd = (m < 3) & (++m > 5);
        System.out.println("nonShortAnd: " + nonShortAnd + ", m = " + m);  // m变为6

        int n = 5;
        // |不会短路，两边都会执行
        boolean nonShortOr = (n > 3) | (++n > 5);
        System.out.println("nonShortOr: " + nonShortOr + ", n = " + n);  // n变为6
    }
}
